package com.jms.framework.beans.context;

import com.jms.framework.beans.BeanDefinition;
import com.jms.framework.beans.exception.BeansException;
import com.jms.framework.context.Context;

/**
 * Bean上下文接口，扩展了基础的上下文功能，提供了获取Bean实例的方法
 * 主要作用是在应用中以标准化的方式访问和管理Bean实例
 * @author JMS
 * @version 1.0.0
 * @since 20250123
 */
public interface BeanContext extends Context {
    /**
     * 根据Bean的名称获取Bean实例
     *
     * @param beanName Bean的唯一名称
     * @return Object类型的Bean实例
     * @throws BeansException 如果Bean获取失败，例如不存在指定名称的Bean
     */
    Object getBean(String beanName) throws BeansException;

    /**
     * 根据Bean的类型获取Bean实例
     *
     * @param <T> Bean的类型
     * @param beanClass Bean的Class对象，用于指定Bean的类型
     * @return 指定类型的Bean实例
     * @throws BeansException 如果Bean获取失败，例如不存在指定类型的Bean
     */
    <T> T getBean(Class<T> beanClass) throws BeansException;

    Object[] getBeans();

    BeanDefinition[] getBeanDefinitions();

    /**
     * Bean初始化完成后的回调方法
     */
    void afterInit();
}
